home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PET / S-Super PET / (s)tz.d64 / STORAGE.ASM < prev    next >
Assembly Source File  |  2009-01-18  |  5KB  |  164 lines

  1. opt nolist    ;program   STORAGE shows how numbers are stored
  2.  
  3.         xref cnvs2f_, printf_, itohs_,fstore_,suffixst_
  4.         xref printf_,getrec_,putchar_,putnl_,copystr_,length_
  5.  
  6. conversion    ldd #title
  7.         jsr printf_
  8. one     ldd #prompt
  9.         jsr  answer_same_line
  10.  
  11.         ldd #buffer
  12.         jsr cnvs2f_                     ;string in BUFFER converted to FP
  13.         ldd #memory_location            ;stored to memory
  14.         jsr fstore_
  15.         ldd #FAC_string
  16.         jsr printf_
  17.         ldb #6                          ;FAC1 uses 6 bytes
  18.         stb counter
  19.         ldd #$80                        ;FAC1's address
  20.         jsr print_it                    ;FAC1 displayed
  21.         ldd #memory_string
  22.         jsr printf_                     ;memory displayed
  23.         ldb #5                          ;memory FP uses 5 bytes
  24.         stb counter
  25.         ldd #memory_location
  26.         jsr print_it
  27.         jsr putnl_
  28.         ldb #'2                         ;maximum answer allowed
  29.         ldx #another_one
  30.         jsr get_a_char
  31.         cmpb #'1
  32.         if eq                           ;another one
  33.            ldb #1
  34.            jsr move_up
  35.            bra one
  36.         endif
  37.         jsr $d9a9                       ;clear screen
  38.         clr $32                         ;return to main menu
  39.         rts
  40.  
  41. print_it  pshs d                        ;address where to read
  42.         clr buffer
  43.         loop
  44.            clra
  45.            ldb [,s]                     ;convert number to hex
  46.               pshs d
  47.            ldd #temp_storage            ;destinatin of converted string
  48.            jsr itohs_
  49.               leas 2,s
  50.  
  51.            ldd #buffer
  52.               pshs d
  53.            ldd #temp_storage
  54.            addd #2                      ;to skip leading zeroes
  55.            jsr suffixst_
  56.            ldd #space                   ;destination address left on stack
  57.            jsr suffixst_
  58.               leas 2,s
  59.  
  60.            ldd ,s                       ;increment address at ,s
  61.            addd #1
  62.            std ,s
  63.            dec counter
  64.         until eq
  65.         leas 2,s                        ;address removed from stack
  66.         ldd #buffer
  67.         jsr printf_
  68.         jsr putnl_
  69.         rts
  70.  
  71. ;routine GET_A_CHAR inputs a char, returns it in B and ANSWER
  72. ;condensed from original described in tutorials
  73.  
  74. get_a_char  stb answer                  ;B=maximum answer allowed
  75.         tfr x,d                         ;address of prompt in X
  76.         jsr printf_
  77.  
  78. two     ldy #$130                       ;emptying of keyboard memory
  79.         loop                            ;from $130 to $157
  80.           clr ,y+
  81.           cmpy #$158
  82.         until eq
  83.  
  84.         loop
  85.            jsr $dd82                    ;= BASIC's GET
  86.            cmpb #0                      ;no answer ?
  87.         until ne
  88.         cmpb #'1
  89.         blo two                         ;no answer under '1
  90.         cmpb answer                     ;greatest answer allowed
  91.         bhi two
  92.  
  93.         stb answer
  94.  
  95.         jsr $d714                       ;displays answer char
  96.         jsr putnl_
  97.  
  98.         ldb answer
  99.         rts
  100.  
  101. ;routine ANSWER_SAME_LINE inputs answer on same line as prompt
  102. ;no substitution (%s, %n) or tab chars allowed in prompt
  103. ;condensed from original described in tutorials
  104.  
  105. answer_same_line pshs d                 ;address of prompt
  106.         jsr length_                     ;finds length of prompt
  107.         std  nb_chars
  108.  
  109.         puls d                          ;recalls address of prompt
  110.         jsr printf_
  111.  
  112.         ldd #80                         ;all purpose buffer
  113.            pshs d
  114.         ldd #buffer
  115.         jsr getrec_
  116.            leas 2,s                     ;number of chars read left in D
  117.         addd #buffer
  118.         tfr d,y
  119.         clr ,y                          ;null byte at end of string
  120.  
  121.         ldd #buffer                     ;answer moved to start of BUFFER
  122.            pshs d                       ;address of BUFFER remains in D
  123.         addd nb_chars                   ;skip prompt
  124.         jsr copystr_
  125.            leas 2,s
  126.  
  127.         rts
  128.  
  129. ;routine MOVE_UP moves cursor up and erases lines where it passes
  130.  
  131. move_up  stb nb_times
  132.         ldd #$06
  133.         jsr putchar_
  134.         loop
  135.            ldd #each_line
  136.            jsr printf_
  137.            dec nb_times
  138.         until eq
  139.         rts
  140.  
  141. nb_times rmb 1
  142. each_line fcb $0b,$06,$00
  143. counter  rmb 1
  144. memory_location rmb 5
  145. title fcb  12,9                         ;clear screen, move 1 tab
  146.         fcc "This program will display how numbers you input are stored"
  147.         fcb 13,13,9
  148.         fcc "        PROGRAM CREATED BY ALAIN PROULX FOR ISPUG"
  149.         fcb 13,10,0                     ;return, move down 1 line
  150. prompt fcc "Input any number: "
  151.         fcb 0
  152. FAC_string fcc    "Here is how it is stored in FAC1:   "
  153.         fcb 0
  154. memory_string fcc "Here is how it is stored in memory: "
  155.         fcb 0
  156. another_one fcc  "[1] another one?  [2] quit? "
  157.         fcb 0
  158. space   fcb 32,0
  159. answer  rmb 1
  160. nb_chars rmb 1
  161. temp_storage rmb 10
  162. buffer rmb 80
  163.         end
  164.